package com.kfm.am;

public class TryDemoFive {
    public static void main(String[] args) {
        try {
            testThree();
        } catch (Exception e2) {
            // e 代表 testThree() 抛出的异常对象
            // 获取产生当前这个异常的上一个异常对象
            System.out.println(e2.getMessage()); // 我是新产生的异常2
            Throwable e1 = e2.getCause();
            System.out.println(e1.getMessage()); // 我是新产生的异常1
            Throwable e = e1.getCause();
            System.out.println(e.getMessage()); // 我是一个异常
//            e.printStackTrace(); // 我是新产生的异常2
        }
    }

    public static void testOne() throws MyException {
        System.out.println("我是testOne");
        throw new MyException("我是一个异常");
    }

    public static void testTwo() throws Exception {
        System.out.println("我是testTwo");
        try {
            testOne();
        } catch (Exception e) {
            // e 代表的就是testOne() 抛出的异常对象
            System.out.println(e.getMessage());
            Exception e1 = new Exception("我是新产生的异常1", e);
            throw e1;
        }
    }

    public static void testThree() throws Exception {
        System.out.println("我是testThree");
        try {
            testTwo();
        } catch (Exception e1) {
            // e 代表 testTwo() 抛出的异常对象
            Exception e2 = new Exception("我是新产生的异常2", e1);
            throw e2;
        }
    }
}

class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}
